#pragma once

#include <Arduino.h>
#include "Screen.h"
#include "pins_config.h"  // 引入引脚定义

// ====================================================================================
// Battery 电池电量管理类
// ====================================================================================
class Battery {
public:
  // 构造函数
  Battery(Screen& screen);

  // 初始化电池检测引脚
  void init();

  // 获取电池电量百分比 (0-100)
  int getPercentage();

  // 获取实际电压值（mV）
  int getVoltage();

  // 获取电压ADC值
  int getADC();

  // 在指定位置绘制电池图标和百分比
  void drawIcon(int x, int y);

  // 在指定位置绘制电池图标和百分比（可自定义百分比）
  void drawIcon(int x, int y, int percentage);

private:
  Screen& _screen;

  // 电池电压常量
  static const int MIN_VOLTAGE = 3000;  // 最低电压 3.0V (mV)
  static const int MAX_VOLTAGE = 4200;  // 最高电压 4.2V (mV)

  // 电池图标尺寸
  static const int ICON_WIDTH = 20;
  static const int ICON_HEIGHT = 10;
  static const int ICON_BATTERY_TIP_WIDTH = 2;
  static const int ICON_BATTERY_TIP_HEIGHT = 4;

  // ADC采样平滑滤波参数
  static const int SAMPLE_COUNT = 10;  // 采样次数

  // 根据电量百分比获取填充颜色
  uint16_t getFillColor(int percentage);

  // 限制电压范围
  int constrainVoltage(int voltage);

  // 限制百分比范围（0-100）
  int constrainPercentage(int percentage);

  // 平滑读取电压值（多次采样取平均）
  int getSmoothedVoltage();
};
